#ifndef MANEJADORSEMASCENSORES_H_
#define MANEJADORSEMASCENSORES_H_

#include "Semaforo.h"
#include "Logger.h"
#include <string>

class ManejadorSemAscensores{

private:

		int cantAscensores;
		Semaforo** semAscensores;
		Logger* logger;


		void crearSemaforos();

		void log(std::string message);

		void debug(std::string message);

		void sync(std::string message);

public:

		ManejadorSemAscensores(int cantAscensores);
		virtual ~ManejadorSemAscensores();

		// Persona espera. SEM_OPEN
		void esperarApertura(int numAsc);
		// Ascensor abre para todos. SEM_OPEN
		void abrir(int numAsc,int cantidad);
		// Persona le da el OK para que cierre. SEM_CLOSE
		void habilitarCierre(int numAsc);
		// Ascensor cierra. SEM_ALL_NOTIFIED
		void cerrar(int numAsc, int cantidad);
		// Esperando al Controlador central Para el prox piso. SEM_NEXT_STOP
		void esperarProxPisos(int numAsc);
		// Controlador central habilita un piso para ir. SEM_NEXT_STOP
		void despertarAscensor(int numAsc);
		//Inicilizamos los semaforos.
		void inicializar();

		void liberarSemaforos();

};


#endif /* MANEJADORSEMASCENSORES_H_ */
